package main

import (
	"bytes"
	"compress/zlib"
	"io"
	"net/http"
	"os"
	"strings"
)

//func main() {
//	args := os.Args
//	if len(args) == 3 && args[1] != "" && args[2] != "" {
//		downloadFromUrl(args[1], args[2])
//		fmt.Println("done")
//	} else {
//		fmt.Println("参数格式错误！应传入两个参数，第一个参数是弹幕文件的url，第二个参数是弹幕文件保存的路径")
//	}
//}

// 从链接地址下载字幕文件，并保存到指定目录
func downloadFromUrl(url string, path string) {
	// 从b站下载字幕
	res, err := http.Get(url)
	if err != nil {
		return
	}
	defer res.Body.Close()

	// 创建文件夹
	filePath := ""
	lIndex := strings.LastIndex(path, "\\")
	if lIndex != -1 {
		filePath = path[0:lIndex]
	} else {
		return
	}
	exists := pathExists(filePath)
	if !exists {
		err := os.MkdirAll(filePath, 0666)
		if err != nil {
			return
		}
	}

	// 创建输出文件
	create, _ := os.Create(path)
	defer create.Close()
	if create != nil {
		// 对字幕进行zlib解压
		buf := &bytes.Buffer{}
		header := []byte{0x78, 0x9c}
		_, _ = buf.Write(header)
		_, _ = buf.ReadFrom(res.Body)
		reader, err := zlib.NewReader(buf)
		if err != nil {
			return
		} else {
			out := &bytes.Buffer{}
			io.Copy(out, reader)
			_, _ = create.Write(out.Bytes())
		}
	}
}

// 判断文件是否存在
func pathExists(path string) bool {
	_, err := os.Stat(path)
	if err == nil {
		return true
	}
	if os.IsNotExist(err) {
		return false
	}
	return false
}
